/* 
   自定义指令  v-permission

   v-permission:disabled = "['super','admin']"
   v-permission:remove = "['super','admin']"
 

*/

import _ from "lodash";
import router from '@/router'
import store from '@/store'

// 防抖处理  => 返回防抖版的新函数
let toLogin = _.debounce(function () { // 原本跳转登录需要执行的函数  => 做防抖处理
    console.log("去登录!!!");
    store.dispatch('exitAndUpdateAuthority')// 清除本地数据和vuex上的数据

    let currentRoute = router.currentRoute.value;
    router.replace({ path: "/login", query: { ReturnUrl: currentRoute.fullPath } })
}, 300);


// 插件  
// 1. 一个插件可以是一个拥有 install() 方法的对象
/* export default {
    install(app, option={a:0,b:0}) {
        console.log("app",app);
        console.log("option",option);


        app.directive("permission", function (el, binding) {
            console.log("el", el);
            console.log("binding", binding);

            // 对应权限判断
            // arg  => 参数 disabled remove,不符合权限的禁用/删除元素
            // value  => 运行访问的权限列表
            let { arg, value } = binding;

            let role = store.getters.role;  // 当前登录的角色信息
            if (role) {
                if (!value.includes(role)) { // 不在权限列表中的人
                    switch (arg) {
                        case "disabled":
                            el.classList.add("is-disabled");
                            el.disabled = true; // 原生js语法 => 禁用按钮
                            break;

                        case "remove":
                            el.remove();
                            break;

                    }
                }
            } else {
                toLogin();
            }
            // 禁用按钮
            // el.classList.add("is-disabled");
            // el.disabled = true; // 原生js语法 => 禁用按钮
        })
    }
} */


// 2. 可以直接是一个安装函数本身
export default function(app, option={a:0,b:0}) {
    // console.log("app",app);
    // console.log("option",option);


    app.directive("permission", function (el, binding) {
        // console.log("el", el);
        // console.log("binding", binding);

        // 对应权限判断
        // arg  => 参数 disabled remove,不符合权限的禁用/删除元素
        // value  => 运行访问的权限列表
        let { arg, value } = binding;

        let role = store.getters.role;  // 当前登录的角色信息
        if (role) {
            if (!value.includes(role)) { // 不在权限列表中的人
                switch (arg) {
                    case "disabled":
                        el.classList.add("is-disabled");
                        el.disabled = true; // 原生js语法 => 禁用按钮
                        break;

                    case "remove":
                        el.remove();
                        break;

                }
            }
        } else {
            toLogin();
        }
        // 禁用按钮
        // el.classList.add("is-disabled");
        // el.disabled = true; // 原生js语法 => 禁用按钮
    })
}